// 实现 Triangle 类，继承自 Shape 类
class Triangle extends Shape {
    private double side1; // 三角形的第一条边
    private double side2; // 三角形的第二条边
    private double side3; // 三角形的第三条边

    /**
     * 构造方法，初始化三角形的三条边，并检查三边合法性
     * @param side1 三角形的第一条边
     * @param side2 三角形的第二条边
     * @param side3 三角形的第三条边
     * @throws  如果三边不满足任意两边之和大于第三边，抛出异常
     */
    public Triangle(double side1, double side2, double side3) {
        if (side1 + side2 <= side3 || side1 + side3 <= side2 || side2 + side3 <= side1) {
            throw new IllegalArgumentException("输入的三边不能构成三角形");
        }
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    /**
     * 计算三角形的面积，使用海伦公式
     * @return 三角形的面积
     */
    @Override
    public double calcArea() {
        double s = (side1 + side2 + side3) / 2; // 半周长
        return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3)); // 海伦公式
    }

    /**
     * 计算三角形的周长
     * @return 三角形的周长
     */
    @Override
    public double calcPerimeter() {
        return side1 + side2 + side3; // 三角形的周长公式：三边之和
    }
}